home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_570 / gadtoolsbox / source / source.lha / Prefs.c < prev    next >
C/C++ Source or Header  |  1991-11-04  |  16KB  |  484 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   Prefs.c
  4. *   Copyright       :   © Copyright 1991 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   13-Oct-91
  7. *   Current version :   1.00
  8. *   Translator      :   DICE v2.6
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   13-Oct-91     1.00            Preferences requester.
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "GTEd.h"
  19. #include "Protos.h"
  20.  
  21. /*
  22.  * --- External referenced data.
  23.  */
  24. extern ULONG             Class;
  25. extern UWORD             Code;
  26. extern struct TextAttr   Topaz80;
  27. extern APTR              MainVisualInfo;
  28. extern struct Screen    *MainScreen;
  29. extern struct Window    *MainWindow;
  30. extern struct Gadget    *Object;
  31. extern struct Prefs      MainPrefs;
  32. extern UWORD             CountFrom;
  33. extern UBYTE             MainFileName[512];
  34.  
  35. /*
  36.  * --- Gadget ID's
  37.  */
  38. #define GD_STATIC       0
  39. #define GD_RAW          1
  40. #define GD_COORDS       2
  41. #define GD_ICON         3
  42. #define GD_IDFROM       4
  43. #define GD_PREFIX       5
  44. #define GD_SAVE         6
  45. #define GD_LOAD         7
  46. #define GD_USE          8
  47. #define GD_CANCEL       9
  48.  
  49. /*
  50.  * --- Module data.
  51.  */
  52. struct Window           *pr_Wnd   = NULL;
  53. struct Gadget           *pr_GList = NULL;
  54. struct FileRequester    *pr_Freq  = NULL;
  55. struct Gadget           *pr_Gadgets[6];
  56.  
  57. BOOL                     pr_Static = FALSE, pr_Raw = FALSE;
  58. BOOL                     pr_Coords = FALSE, pr_Icon = FALSE;
  59.  
  60. WORD                     pr_Zoom[4];
  61.  
  62. struct TagItem           pr_nwTags[] = {
  63.     WA_Left,                0l,
  64.     WA_Top,                 0l,
  65.     WA_Width,               0l,
  66.     WA_Height,              0l,
  67.     WA_IDCMP,               IDCMP_CLOSEWINDOW | BUTTONIDCMP | CHECKBOXIDCMP | INTEGERIDCMP | IDCMP_VANILLAKEY | IDCMP_REFRESHWINDOW,
  68.     WA_Flags,               WFLG_DRAGBAR | WFLG_DEPTHGADGET| WFLG_CLOSEGADGET | WFLG_ACTIVATE | WFLG_RMBTRAP | WFLG_SMART_REFRESH,
  69.     WA_Gadgets,             0l,
  70.     WA_Title,               "Preferences:",
  71.     WA_AutoAdjust,          TRUE,
  72.     WA_Zoom,                (Tag)pr_Zoom,
  73.     TAG_DONE };
  74.  
  75. UBYTE                   pr_File[32]  = "GadToolsBox.prefs";
  76. UBYTE                   pr_Path[256] = "DEVS:";
  77. UBYTE                   pr_Patt[32]  = "#?.prefs";
  78. UBYTE                   pr_LFile[32]  = "GadToolsBox.prefs";
  79. UBYTE                   pr_LPath[256] = "DEVS:";
  80. UBYTE                   pr_LPatt[32]  = "#?.prefs";
  81. UBYTE                   pr_Buffer[512];
  82.  
  83. struct TagItem          pr_STags[] = {
  84.     ASL_Hail,           "Save Preferences...",
  85.     ASL_Window,         0l,
  86.     ASL_File,           pr_File,
  87.     ASL_Dir,            pr_Path,
  88.     ASL_Pattern,        pr_Patt,
  89.     ASL_OKText,         "Save",
  90.     ASL_FuncFlags,      FILF_SAVE | FILF_PATGAD,
  91.     TAG_DONE };
  92.  
  93. struct TagItem          pr_LTags[] = {
  94.     ASL_Hail,           "Load Preferences...",
  95.     ASL_Window,         0l,
  96.     ASL_File,           pr_LFile,
  97.     ASL_Dir,            pr_LPath,
  98.     ASL_Pattern,        pr_LPatt,
  99.     ASL_OKText,         "Load",
  100.     ASL_FuncFlags,      FILF_PATGAD,
  101.     TAG_DONE };
  102.  
  103. /*
  104.  * --- Set the preferences.
  105.  */
  106. void SetPreferences( struct Prefs *prf )
  107. {
  108.     setmem( (char *)prf, (long)sizeof( struct Prefs ), 0l );
  109.  
  110.     prf->pr_Version     =   PR_VERSION;
  111.  
  112.     if ( pr_Static )    prf->pr_PrefFlags0  |= PRF_STATIC;
  113.     if ( pr_Raw    )    prf->pr_PrefFlags0  |= PRF_RAW;
  114.     if ( pr_Coords )    prf->pr_PrefFlags0  |= PRF_COORDS;
  115.     if ( pr_Icon   )    prf->pr_PrefFlags0  |= PRF_WRITEICON;
  116.  
  117.     prf->pr_CountIDFrom = CountFrom = (( struct StringInfo * )pr_Gadgets[ GD_IDFROM ]->SpecialInfo )->LongInt;
  118.     strcpy( &prf->pr_ProjectPrefix[0], (( struct StringInfo * )pr_Gadgets[ GD_PREFIX ]->SpecialInfo )->Buffer );
  119. }
  120.  
  121. /*
  122.  * --- Set the preferences gadgets.
  123.  */
  124. void MakePreferences( struct Prefs *prf )
  125. {
  126.     long    flg = prf->pr_PrefFlags0;
  127.  
  128.     if (( flg & PRF_STATIC ) == PRF_STATIC )
  129.         pr_Static = TRUE; else pr_Static = FALSE;
  130.     if (( flg & PRF_RAW ) == PRF_RAW )
  131.         pr_Raw = TRUE; else pr_Raw = FALSE;
  132.     if (( flg & PRF_COORDS ) == PRF_COORDS )
  133.         pr_Coords = TRUE; else pr_Coords = FALSE;
  134.     if (( flg & PRF_WRITEICON ) == PRF_WRITEICON )
  135.         pr_Icon = TRUE; else pr_Icon = FALSE;
  136.  
  137.     GT_SetGadgetAttrs( pr_Gadgets[ GD_STATIC ], pr_Wnd, 0l, GTCB_Checked, pr_Static, TAG_DONE );
  138.     GT_SetGadgetAttrs( pr_Gadgets[ GD_RAW    ], pr_Wnd, 0l, GTCB_Checked, pr_Raw   , TAG_DONE );
  139.     GT_SetGadgetAttrs( pr_Gadgets[ GD_COORDS ], pr_Wnd, 0l, GTCB_Checked, pr_Coords, TAG_DONE );
  140.     GT_SetGadgetAttrs( pr_Gadgets[ GD_ICON   ], pr_Wnd, 0l, GTCB_Checked, pr_Icon  , TAG_DONE );
  141.     GT_SetGadgetAttrs( pr_Gadgets[ GD_IDFROM ], pr_Wnd, 0l, GTIN_Number, prf->pr_CountIDFrom, TAG_DONE );
  142.     GT_SetGadgetAttrs( pr_Gadgets[ GD_PREFIX ], pr_Wnd, 0l, GTST_String, &prf->pr_ProjectPrefix[0], TAG_DONE );
  143. }
  144.  
  145. /*
  146.  * --- Load the preferences.
  147.  */
  148. void ReadPreferences( void )
  149. {
  150.     BPTR            file = 0l;
  151.     struct Prefs    prf;
  152.  
  153.     if ( pr_Freq = AllocAslRequest( ASL_FileRequest, TAG_DONE )) {
  154.         pr_LTags[1].ti_Data = pr_Wnd;
  155.         if ( AslRequest( pr_Freq, pr_LTags )) {
  156.  
  157.             strcpy( pr_Buffer, MainFileName );
  158.             strcpy( MainFileName, pr_Freq->rf_Dir );
  159.             CheckDirExtension();
  160.             strcat( MainFileName, pr_Freq->rf_File );
  161.  
  162.             strcpy( pr_LPath, pr_Freq->rf_Dir );
  163.             strcpy( pr_LFile, pr_Freq->rf_File );
  164.             strcpy( pr_LPatt, pr_Freq->rf_Pat );
  165.  
  166.             if ( file = MyOpen( MODE_OLDFILE )) {
  167.                 Read( file, (char *)&prf, (long)sizeof( struct Prefs ));
  168.                 MakePreferences( &prf );
  169.             }
  170.         }
  171.     }
  172.  
  173.     if ( file )     Close( file );
  174.     if ( pr_Freq )  FreeAslRequest( pr_Freq );
  175.  
  176.     strcpy( MainFileName, pr_Buffer );
  177.     pr_Freq = 0l;
  178. }
  179.  
  180. /*
  181.  * --- Save the preferences.
  182.  */
  183. void WritePreferences( void )
  184. {
  185.     BPTR            file = 0l;
  186.     struct Prefs    prf;
  187.  
  188.     SetPreferences( &prf );
  189.  
  190.     if ( pr_Freq = AllocAslRequest( ASL_FileRequest, TAG_DONE )) {
  191.         pr_STags[1].ti_Data = pr_Wnd;
  192.         if ( AslRequest( pr_Freq, pr_STags )) {
  193.  
  194.             strcpy( pr_Buffer, MainFileName );
  195.             strcpy( MainFileName, pr_Freq->rf_Dir );
  196.             CheckDirExtension();
  197.             strcat( MainFileName, pr_Freq->rf_File );
  198.  
  199.             strcpy( pr_Path, pr_Freq->rf_Dir );
  200.             strcpy( pr_File, pr_Freq->rf_File );
  201.             strcpy( pr_Patt, pr_Freq->rf_Pat );
  202.  
  203.             if ( file = MyOpen( MODE_NEWFILE ))
  204.                 Write( file, (char *)&prf, (long)sizeof( struct Prefs ));
  205.         }
  206.     }
  207.  
  208.     if ( file )     Close( file );
  209.     if ( pr_Freq )  FreeAslRequest( pr_Freq );
  210.  
  211.     strcpy( MainFileName, pr_Buffer );
  212.     pr_Freq = 0l;
  213. }
  214.  
  215. /*
  216.  * --- Display the Preferences requester.
  217.  */
  218. long Preferences( void )
  219. {
  220.     struct Gadget       *g;
  221.     struct NewGadget     ng;
  222.     BOOL                 running =  TRUE;
  223.     WORD                 l, t, w, h, btop, bleft, fnc, num;
  224.  
  225.     btop  = MainScreen->WBorTop + MainScreen->RastPort.TxHeight;
  226.     bleft = MainScreen->WBorLeft;
  227.  
  228.     w = bleft + MainScreen->WBorRight  + 300;
  229.     h = btop  + MainScreen->WBorBottom + 84;
  230.     l = (( MainScreen->Width  >> 1 ) - ( w >> 1 ));
  231.     t = (( MainScreen->Height >> 1 ) - ( h >> 1 ));
  232.  
  233.     pr_Zoom[0] = 0;
  234.     pr_Zoom[1] = btop;
  235.     pr_Zoom[2] = 200;
  236.     pr_Zoom[3] = btop;
  237.  
  238.     pr_nwTags[0].ti_Data = l;
  239.     pr_nwTags[1].ti_Data = t;
  240.     pr_nwTags[2].ti_Data = w;
  241.     pr_nwTags[3].ti_Data = h;
  242.  
  243.     pr_nwTags[10].ti_Data = (Tag)MainScreen;
  244.  
  245.     if (( MainScreen->Flags & CUSTOMSCREEN) == CUSTOMSCREEN )
  246.         pr_nwTags[10].ti_Tag  = WA_CustomScreen;
  247.     else if (( MainScreen->Flags & PUBLICSCREEN ) == PUBLICSCREEN )
  248.         pr_nwTags[10].ti_Tag  = WA_PubScreen;
  249.     else
  250.         pr_nwTags[10].ti_Tag  = TAG_DONE;
  251.  
  252.     if ( g = CreateContext( &pr_GList )) {
  253.  
  254.         ng.ng_LeftEdge      =   bleft + 6;
  255.         ng.ng_TopEdge       =   btop + 5;
  256.         ng.ng_GadgetText    =   "_Static data";
  257.         ng.ng_TextAttr      =   &Topaz80;
  258.         ng.ng_GadgetID      =   GD_STATIC;
  259.         ng.ng_Flags         =   PLACETEXT_RIGHT;
  260.         ng.ng_VisualInfo    =   MainVisualInfo;
  261.  
  262.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  263.  
  264.         pr_Gadgets[ GD_STATIC ] = g;
  265.  
  266.         ng.ng_LeftEdge      =   bleft + 150;
  267.         ng.ng_GadgetText    =   "_RAW Asm source";
  268.         ng.ng_GadgetID      =   GD_RAW;
  269.  
  270.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  271.  
  272.         pr_Gadgets[ GD_RAW ] = g;
  273.  
  274.         ng.ng_LeftEdge      =   bleft + 6;
  275.         ng.ng_TopEdge       =   btop + 20;
  276.         ng.ng_GadgetText    =   "C_oordinates";
  277.         ng.ng_GadgetID      =   GD_COORDS;
  278.  
  279.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  280.  
  281.         pr_Gadgets[ GD_COORDS ] = g;
  282.  
  283.         ng.ng_LeftEdge      =   bleft + 150;
  284.         ng.ng_GadgetText    =   "_Write Icon";
  285.         ng.ng_GadgetID      =   GD_ICON;
  286.  
  287.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  288.  
  289.         pr_Gadgets[ GD_ICON ] = g;
  290.  
  291.         ng.ng_TopEdge       =   btop + 35;
  292.         ng.ng_GadgetText    =   "Co_unt ID from  ->";
  293.         ng.ng_Width         =   144;
  294.         ng.ng_Height        =   12;
  295.         ng.ng_GadgetID      =   GD_IDFROM;
  296.         ng.ng_Flags         =   PLACETEXT_LEFT;
  297.  
  298.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_MaxChars, 5l, GT_Underscore, (Tag)'_', TAG_DONE );
  299.  
  300.         SetStringGadget( g );
  301.  
  302.         pr_Gadgets[ GD_IDFROM ] = g;
  303.  
  304.         ng.ng_TopEdge       =   btop + 51;
  305.         ng.ng_GadgetText    =   "_Project Prefix ->";
  306.         ng.ng_GadgetID      =   GD_PREFIX;
  307.  
  308.         g = CreateGadget( STRING_KIND, g, &ng, GTIN_MaxChars, 5l, GT_Underscore, (Tag)'_', TAG_DONE );
  309.  
  310.         ng.ng_LeftEdge      =   bleft + 6;
  311.         ng.ng_TopEdge       =   btop + 67;
  312.         ng.ng_Width         =   60;
  313.         ng.ng_Height        =   13;
  314.         ng.ng_GadgetText    =   "S_ave";
  315.         ng.ng_GadgetID      =   GD_SAVE;
  316.         ng.ng_Flags         =   PLACETEXT_IN;
  317.  
  318.         SetStringGadget( g );
  319.  
  320.         pr_Gadgets[ GD_PREFIX ] = g;
  321.  
  322.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  323.  
  324.         ng.ng_LeftEdge      =   bleft + 82;
  325.         ng.ng_GadgetText    =   "_Load";
  326.         ng.ng_GadgetID      =   GD_LOAD;
  327.  
  328.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  329.  
  330.         ng.ng_LeftEdge      =   bleft + 158;
  331.         ng.ng_GadgetText    =   "Us_e";
  332.         ng.ng_GadgetID      =   GD_USE;
  333.  
  334.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  335.  
  336.         ng.ng_LeftEdge      =   bleft + 234;
  337.         ng.ng_GadgetText    =   "_CANCEL";
  338.         ng.ng_GadgetID      =   GD_CANCEL;
  339.  
  340.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  341.  
  342.         if ( g ) {
  343.  
  344.             pr_nwTags[6].ti_Data = (Tag)pr_GList;
  345.  
  346.             if ( pr_Wnd = OpenWindowTagList( NULL, pr_nwTags )) {
  347.  
  348.                 pr_Zoom[0] = l;
  349.                 pr_Zoom[1] = t;
  350.                 pr_Zoom[2] = w;
  351.                 pr_Zoom[3] = h;
  352.  
  353.                 GT_RefreshWindow( pr_Wnd, NULL );
  354.  
  355.                 MakePreferences( &MainPrefs );
  356.  
  357.                 do {
  358.                     WaitPort( pr_Wnd->UserPort );
  359.  
  360.                     while ( ReadIMsg( pr_Wnd )) {
  361.  
  362.                         switch ( Class ) {
  363.  
  364.                             case    IDCMP_REFRESHWINDOW:
  365.                                 GT_BeginRefresh( pr_Wnd );
  366.                                 GT_EndRefresh( pr_Wnd, TRUE );
  367.                                 break;
  368.  
  369.                             case    IDCMP_CLOSEWINDOW:
  370.                                 running = FALSE;
  371.                                 break;
  372.  
  373.                             case    IDCMP_GADGETUP:
  374.                                 switch ( Object->GadgetID ) {
  375.  
  376.                                     case    GD_STATIC:
  377.                                         FlipFlop( 0l, 0l, 0l, &pr_Static );
  378.                                         break;
  379.  
  380.                                     case    GD_RAW:
  381.                                         FlipFlop( 0l, 0l, 0l, &pr_Raw );
  382.                                         break;
  383.  
  384.                                     case    GD_COORDS:
  385.                                         FlipFlop( 0l, 0l, 0l, &pr_Coords );
  386.                                         break;
  387.  
  388.                                     case    GD_ICON:
  389.                                         FlipFlop( 0l, 0l, 0l, &pr_Icon );
  390.                                         break;
  391.  
  392.                                     case    GD_IDFROM:
  393.                                         num = (( struct StringInfo * )pr_Gadgets[ GD_IDFROM ]->SpecialInfo )->LongInt;
  394.  
  395.                                         if ( num < 0 ) {
  396.                                             DisplayBeep( MainScreen );
  397.                                             GT_SetGadgetAttrs( pr_Gadgets[ GD_IDFROM ], pr_Wnd, 0l, GTIN_Number, 0l, TAG_DONE );
  398.                                         }
  399.                                         break;
  400.  
  401.                                     case    GD_SAVE:
  402.                                         Save:
  403.                                         WritePreferences();
  404.                                         break;
  405.  
  406.                                     case    GD_LOAD:
  407.                                         Load:
  408.                                         ReadPreferences();
  409.                                         break;
  410.  
  411.                                     case    GD_USE:
  412.                                         Use:
  413.                                         running = FALSE;
  414.                                         fnc     = TRUE;
  415.                                         break;
  416.  
  417.                                     case    GD_CANCEL:
  418.                                         Cancel:
  419.                                         running = FALSE;
  420.                                         fnc     = FALSE;
  421.                                 }
  422.                                 break;
  423.  
  424.                             case    IDCMP_VANILLAKEY:
  425.                                 switch( Code ) {
  426.  
  427.                                     case    's':
  428.                                         FlipFlop( pr_Wnd, pr_Gadgets, GD_STATIC, &pr_Static );
  429.                                         break;
  430.  
  431.                                     case    'r':
  432.                                         FlipFlop( pr_Wnd, pr_Gadgets, GD_RAW, &pr_Raw );
  433.                                         break;
  434.  
  435.                                     case    'o':
  436.                                         FlipFlop( pr_Wnd, pr_Gadgets, GD_COORDS, &pr_Coords );
  437.                                         break;
  438.  
  439.                                     case    'w':
  440.                                         FlipFlop( pr_Wnd, pr_Gadgets, GD_ICON, &pr_Icon );
  441.                                         break;
  442.  
  443.                                     case    'u':
  444.                                         ActivateGadget( pr_Gadgets[ GD_IDFROM ], pr_Wnd, 0l );
  445.                                         break;
  446.  
  447.                                     case    'p':
  448.                                         ActivateGadget( pr_Gadgets[ GD_PREFIX ], pr_Wnd, 0l );
  449.                                         break;
  450.  
  451.                                     case    'a':
  452.                                         goto Save;
  453.  
  454.                                     case    'l':
  455.                                         goto Load;
  456.  
  457.                                     case    'e':
  458.                                         goto Use;
  459.  
  460.                                     case    'c':
  461.                                         goto Cancel;
  462.                                 }
  463.                                 break;
  464.                         }
  465.                     }
  466.                 } while ( running );
  467.             }
  468.         }
  469.     }
  470.  
  471.     if ( fnc ) {
  472.         SetPreferences( &MainPrefs );
  473.         MouseMove( MainWindow, pr_Coords );
  474.     }
  475.  
  476.     if ( pr_Wnd )           CloseWindow( pr_Wnd );
  477.     if ( pr_GList )         FreeGadgets( pr_GList );
  478.  
  479.     pr_Wnd   = 0l;
  480.     pr_GList = 0l;
  481.  
  482.     ClearMsgPort( MainWindow->UserPort );
  483. }
  484.